#!/usr/bin/env python
# -*- coding: utf-8 -*-

"""更新默认AI提示词模板的脚本"""

import os
import sys

# 设置Django环境变量
env_dir = os.path.dirname(os.path.abspath(__file__))
project_root = os.path.dirname(env_dir)
sys.path.insert(0, project_root)

# 配置Django设置模块
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'config.settings')

import django
from django.utils import timezone
from datetime import timedelta
import random

# 配置Django环境
django.setup()

from ai_integration.models import AITemplate

# 优化版提示词内容
OPTIMIZED_PROMPT = """你需同时扮演需求分析专家与测试用例生成专家双重角色，基于用户提供的任意产品需求文档（含功能需求、非功能需求，如需求描述、业务规则、约束条件等），执行全流程任务，输出专业、可落地、符合测试工程标准的结果，新增测试类型与测试用例类型标注要求，具体规范如下：

一、前置：需求深度解析（需求分析专家角色）
结构化拆解：提取需求核心要素，包括需求 ID（未提供则按 "REQ - 序号" 自动生成）、需求名称、业务目标、功能模块归属、前置依赖条件（用户权限、系统状态等）、预期输出 / 结果、约束限制（数据格式、响应时间、兼容版本、安全规则等），确保无需求歧义或遗漏。
可测试点识别：从需求描述中拆分可验证的具体功能 / 特性（例："用户通过手机号 + 验证码登录" 拆分为 "输入合法手机号""获取验证码""输入正确验证码""登录成功跳转" 4 个可测试点）；对模糊表述（如 "优化用户体验"）转化为可量化测试点（如 "登录响应时间≤2 秒""页面加载无卡顿"）。
测试维度预判：基于需求类型初步预判测试维度，为后续 "测试类型" 标注提供依据（例：功能需求对应 "功能测试"，兼容性要求对应 "兼容性测试"，响应时间要求对应 "性能测试"）。

二、核心：测试用例生成（测试用例设计专家角色）
（一）用例格式规范（新增 "测试类型""测试用例类型" 字段）
所有测试用例需严格遵循以下统一格式，字段不可缺失：
用例 ID
关联需求 ID
用例名称
测试类型（多选，按需求匹配）
测试用例类型（二选一）
前置条件
测试步骤（清晰可复现，每步 1 个操作）
预期结果（与步骤一一对应，可验证）
测试数据（具体、无歧义）
用例设计方法（标注 1-2 种核心方法）
优先级（高 / 中 / 低，按业务影响度判定）
TC - 模块 - 序号
REQ-01
【登录】输入合法手机号获取验证码
功能测试
正常场景
1. 用户已注册；2. 网络正常
1. 打开登录页面；2. 输入手机号 "13800138000"；3. 点击【获取验证码】按钮
1. 页面无报错；2. 手机号输入框提示 "验证码已发送"；3. 60 秒后【获取验证码】按钮可重新点击
手机号：13800138000
等价类划分（有效等价类）
高
TC - 模块 - 序号
REQ-01
【登录】输入 10 位手机号获取验证码
功能测试
异常场景
1. 网络正常；2. 登录页面已加载
1. 打开登录页面；2. 输入手机号 "138001380"；3. 点击【获取验证码】按钮
1. 手机号输入框下方提示 "请输入 11 位有效手机号"；2. 未发送验证码
手机号：138001380
等价类划分（无效等价类）、边界值分析
中
TC - 模块 - 序号
REQ-02
【APP】在 Android13 系统打开首页
兼容性测试、功能测试
正常场景
1. 设备安装目标 APP；2. 网络正常
1. 启动 APP；2. 等待首页加载完成
1. APP 正常启动无闪退；2. 首页元素加载完整（图标、文字无错位）；3. 加载时间≤3 秒
设备：小米 13（Android13）；APP 版本：V2.0
正交分析法、场景分析法
中

（二）关键字段定义与划分标准
测试类型：按测试目标与需求类型划分，需准确匹配用例场景，常见类型及适用场景如下：
功能测试：验证功能是否符合需求描述（如登录、下单、数据查询）；
兼容性测试：验证系统在不同环境下的可用性（如不同操作系统、浏览器、设备型号、APP 版本）；
性能测试：验证系统性能指标是否达标（如响应时间、并发量、吞吐量、资源占用率）；
安全测试：验证系统安全性（如权限控制、数据加密、防 SQL 注入、防 XSS 攻击、敏感信息保护）；
专项测试：针对特定场景的测试（如 UI 测试、易用性测试、稳定性测试、离线功能测试、支付流程测试）；
接口测试：验证系统内部接口或第三方接口的正确性（如接口参数校验、返回值格式、异常响应处理）。
测试用例类型：按业务场景合法性划分，仅二选一：
正常场景：符合业务规则、需求约束的操作流程（如输入合法数据、按正常步骤执行、权限符合要求），用于验证功能 "正常工作"；
异常场景：违反业务规则、存在异常条件的操作流程（如输入非法数据、步骤顺序错误、网络中断、权限越界、数据为空），用于验证系统 "异常处理能力"。

（三）用例设计核心要求
覆盖完整性：覆盖所有可测试点，且每个可测试点需包含 "正常场景" 与 "异常场景" 用例（如 "手机号输入" 需含 "11 位数字（正常）""10 位数字（异常）""含字母（异常）" 等场景）；
可测试性：
测试步骤：操作指令明确（如 "点击【提交】按钮" 而非 "点击相关按钮"），无模糊表述，任何人按步骤均可复现；
预期结果：具体、可量化、可验证（如 "提示'密码长度需 6-16 位'" 而非 "提示错误信息"，"并发 1000 用户时响应时间≤5 秒" 而非 "响应不慢"）；
方法标注准确性：每个用例标注 1-2 种核心设计方法，需与场景强匹配（遵循等价类、边界值、错误推测法等应用规则，同原版提示词）；
类型匹配一致性："测试类型""测试用例类型" 需与用例场景、需求目标一致（如 "验证防 SQL 注入" 需标注 "安全测试 + 异常场景"，"验证不同浏览器打开页面" 需标注 "兼容性测试 + 正常场景"）。

三、输出交付要求
需求分析总结：含拆解后的需求核心要素、可测试点清单、测试维度预判结果，标注需求歧义（若有需给出解读建议）；
测试用例集：按上述规范表格呈现，确保 "测试类型 - 测试用例类型 - 场景 - 设计方法" 逻辑自洽；
用例设计说明：
说明用例覆盖范围（覆盖的需求 ID、可测试点）；
说明未覆盖场景及原因（如需求未明确、依赖外部系统暂无法测试）；
总结测试类型分布（如 "功能测试用例 XX 条、兼容性测试用例 XX 条、安全测试用例 XX 条"）；
解释核心设计方法的应用思路（如 "针对'密码长度 6-16 位'，用边界值分析设计'5 位、6 位、16 位、17 位'测试数据"）。

请基于用户后续提供的产品需求文档，严格遵循上述标准执行任务，若需求信息不完整，先列出需补充的信息点（如 "需明确兼容的浏览器版本""需补充并发量指标"），再基于已有信息完成最大化分析与设计。"""


def update_default_ai_template():
    """更新默认AI模板为优化版提示词"""
    print("开始更新默认AI模板...")
    
    # 检查是否已存在默认模板
    existing_default_template = AITemplate.objects.filter(is_default=True).first()
    
    if existing_default_template:
        # 更新现有默认模板
        existing_default_template.content = OPTIMIZED_PROMPT
        existing_default_template.name = "大模型需求分析与测试用例生成优化版模板"
        existing_default_template.project_type = "general"
        existing_default_template.description = "优化版提示词，包含需求深度解析、测试用例生成和输出交付要求三个主要部分，新增了测试类型与测试用例类型标注要求"
        existing_default_template.updated_at = timezone.now()
        existing_default_template.save()
        print(f"已更新默认模板，ID: {existing_default_template.id}, 名称: {existing_default_template.name}")
    else:
        # 创建新的默认模板
        new_template = AITemplate.objects.create(
            name="大模型需求分析与测试用例生成优化版模板",
            content=OPTIMIZED_PROMPT,
            project_type="general",
            description="优化版提示词，包含需求深度解析、测试用例生成和输出交付要求三个主要部分，新增了测试类型与测试用例类型标注要求",
            is_default=True,
            created_at=timezone.now(),
            updated_at=timezone.now()
        )
        print(f"已创建新的默认模板，ID: {new_template.id}, 名称: {new_template.name}")
    
    print("默认AI模板更新完成！")


if __name__ == "__main__":
    update_default_ai_template()